import httpClient from "@/utils/request";
import type {
  CreateRoleParams,
  MenuTree,
  PageResult,
  PermissionVO,
  RoleListParams,
  RoleMenuAssignParams,
  RolePermissionAssignParams,
  RoleVO,
  UpdateRoleParams,
  UpdateRoleStatusParams
} from "./types";

/**
 * 创建角色
 * @param data 角色信息
 */
export function createRole(data: CreateRoleParams) {
  return httpClient.post<RoleVO>("/system/role/create", data);
}

/**
 * 更新角色
 * @param data 角色信息
 */
export function updateRole(data: UpdateRoleParams) {
  return httpClient.post<RoleVO>("/system/role/update", data);
}

/**
 * 删除角色
 * @param roleId 角色ID
 */
export function deleteRole(roleId: string) {
  return httpClient.post<boolean>("/system/role/delete", { roleId });
}

/**
 * 批量删除角色
 * @param roleIds 角色ID数组
 */
export function batchDeleteRoles(roleIds: string[]) {
  return httpClient.post<boolean>("/system/role/batch/delete", { roleIds });
}

/**
 * 更新角色状态
 * @param data 状态信息
 */
export function updateRoleStatus(data: UpdateRoleStatusParams) {
  return httpClient.post<string>("/system/role/status/update", data);
}

/**
 * 获取角色列表
 * @param params 查询参数
 */
export function getRoleList(params: RoleListParams) {
  return httpClient.get<PageResult<RoleVO>>("/system/role/list", params);
}

/**
 * 获取角色列表（全部）
 */
export function getAllRole() {
  return httpClient.get<RoleVO[]>("/system/role/all");
}

/**
 * 获取角色信息
 * @param roleId 角色ID
 */
export function getRoleInfo(roleId: string) {
  return httpClient.get<RoleVO>("/system/role/info", { roleId });
}

/**
 * 获取角色权限列表
 * @param roleId 角色ID
 */
export function getRolePermissionList(roleId: string) {
  return httpClient.get<PermissionVO[]>("/system/role/permission/list", {
    roleId
  });
}

/**
 * 更新角色权限
 * @param param 角色权限信息
 */
export function updateRolePermission(param: RolePermissionAssignParams) {
  return httpClient.post<string>("/system/role/permission/assign", param);
}

/**
 * 获取角色菜单列表
 * @param roleId 角色ID
 */
export function getRoleMenuList(roleId: string) {
  return httpClient.get<MenuTree[]>(`/system/role/menu/list/${roleId}`);
}

/**
 * 更新角色菜单
 * @param param 角色菜单信息
 */
export function assignMenuPermission(param: RoleMenuAssignParams) {
  return httpClient.post<string>("/system/role/menu/assign", param);
}
